home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / nops / PPC.pm < prev    next >
Text File  |  2006-06-30  |  2KB  |  64 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Nop::PPC;
  11. use strict;
  12. use base 'Msf::Nop';
  13. use Pex::Utils;
  14.  
  15. my $info = {
  16.   'Name'    => 'PPC Nop Generator',
  17.   'Version' => '$Revision: 1.11 $',
  18.   'Authors' => [ 'H D Moore <hdm [at] metasploit.com>', ],
  19.   'Arch'    => [ 'ppc' ],
  20.   'Desc'    =>  'This is a simple PPC nop generator',
  21.   'Refs'    => [ ],
  22. };
  23.  
  24. my $advanced = { };
  25.  
  26. sub new {
  27.   my $class = shift; 
  28.   return($class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_));
  29. }
  30.  
  31. sub Nops {
  32.     my $self = shift;
  33.     my $length = shift;
  34.  
  35.     my $exploit = $self->GetVar('_Exploit');
  36.     my $random  = $self->GetVar('RandomNops');
  37.     my $badChars = $exploit->PayloadBadChars;
  38.  
  39.     if ($random) {
  40.         
  41.         # Extremely simple "add" instruction generator
  42.         for (1 .. 1024) {        
  43.             # Ignore target registers r0 or r1
  44.             my $regs_d = int(rand() * (0x8000 - 0x0800)) + 0x0800;
  45.             my $regs_b = substr(unpack("B*", pack("n", $regs_d)), 1, 15);
  46.             my $flag_o = int(rand() * 2);
  47.             my $flag_r = int(rand() * 2);
  48.             my $packed = pack("B*", "011111" . "$regs_b" . "$flag_o" . "100001010" . "$flag_r");
  49.             my $failed = 0;
  50.             
  51.             foreach (unpack("C*", $packed)) {
  52.                 $failed++ if index($badChars, chr($_)) != -1;
  53.             }
  54.             next if $failed;
  55.             
  56.             return ($packed x  ($length / 4));
  57.         }
  58.     }
  59.  
  60.     return(pack('N',0x60606060) x ($length / 4));  
  61. }
  62.  
  63. 1;
  64.